import numpy as np


def set_data(filepath):
    try:
        with open(filepath, 'r', encoding='ISO-8859-1') as f:
            reader = f.readlines()

        result = {
            "date": [],
            "data": [],
            "header": [h for h in reader[0].strip().split(',')[1:]]
        }

        for row in reader[1:]:
            split_row = row.strip().split(',')
            result["date"].append(split_row[0])
            result["data"].append([float(n) for n in split_row[1:]])

        return result

    except FileNotFoundError:
        print(f'文件不存在: {filepath}')
    except PermissionError:
        print('没有文件权限')
    except Exception as e:
        print('其他错误：', e)


# 获取文件中的所有数据
covid = set_data(r'files\covid19_day_wise.csv')
covid_data = np.array(covid["data"])

# 获取 2020 年 2 月 3 日的所有数据
data_index = covid["date"].index('2020/2/3')
print('获取 2020 年 2 月 3 日的所有数据：')
for header, data in zip(covid["header"], covid_data[data_index]):
    print(f'{header} : {data}')
print()

# 2020 年 1 月 24 日之前的累积确诊病例总数
data_index = covid["date"].index('2020/1/24')
column_index = covid["header"].index("Confirmed")
print('2020 年 1 月 24 日之前的累积确诊病例总数：')
print(covid_data[data_index, column_index])
print()

# 2020 年 7 月 23 日的新增死亡数是多少？
data_index = covid["date"].index('2020/7/23')
column_index = covid["header"].index("New deaths")
print('2020 年 7 月 23 日的新增死亡：')
print(covid_data[data_index, column_index])
print()

# 从 1 月 25 日到 7 月 22 日，一共增长了多少确诊病例？
row_index1 = covid["date"].index("2020/1/25")
row_index2 = covid["date"].index("2020/7/22")
print('从 1 月 25 日到 7 月 22 日，一共增长病例：')
column_index = covid["header"].index("New cases")

print(covid_data[row_index1:row_index2+1, column_index].sum())
print()


# 每天新增确诊数和新恢复数的比例？平均比例，标准差各是多少？
new_cases_idx = covid["header"].index("New cases")
new_recovered_idx = covid["header"].index("New recovered")
not_zero_mask = covid_data[:, new_recovered_idx] != 0

print('每天新增确诊数和新恢复数的比例，平均比例，标准差：')

# 比例
ratio = covid_data[not_zero_mask, new_cases_idx] / covid_data[not_zero_mask, new_recovered_idx]
print("比例样本：", ratio[:5])
print("平均比例：", ratio.mean())
print("标准差：", ratio.std())

